#include "Kalendar.h"
#include <iostream>
#include <cstdlib>

using namespace std;

const int Kalendar::MAX_HARI_DALAM_MUSIM = 20;
const int Kalendar::MAX_MUSIM_DALAM_TAHUN = 2;
const int Kalendar::MAX_RANDOM_EVENT = 2;
int Kalendar::musim=0;
int Kalendar::hari=1;
	
//static integer GetMaxHariDalamMusim()
int Kalendar::GetMaxHariDalamMusim()
{
	return MAX_HARI_DALAM_MUSIM;
}

//static integer GetMaxMusimDalamTahun()
int Kalendar::GetMaxMusimDalamTahun()
{
	return MAX_MUSIM_DALAM_TAHUN;
}

//static void SetMusim(integer value)
//	set musim menjadi value
void Kalendar::SetMusim(int value)
{
	if(value>=0 && value< MAX_MUSIM_DALAM_TAHUN) {
		musim = value;
	}
}

//static int GetMusim()
//	mengembalikan musim
//	
int Kalendar::GetMusim()
{
	return musim;
}

//static void SetHari(integer value)
//	set hari menjadi value
//	value yang diperbolehkan hanya 1 sampai MAX_HARI_DALAM_MUSIM
//	diluar dari itu fungsi tidak melakukan apa2
void Kalendar::SetHari(int value)
{
	if(value<=MAX_HARI_DALAM_MUSIM && value>=1) {
		hari = value;
	}
}
//static integer GetHari()
//	mengembalikan hari
int Kalendar::GetHari()
{
	return hari;
}

//static integer NextHari()
//	memajukan 1 hari
void Kalendar::NextHari()
{
	if(hari>=MAX_HARI_DALAM_MUSIM){
		hari = 1;
		musim = (++musim) % MAX_MUSIM_DALAM_TAHUN;
	}else{
		hari++;
	}
	cout << endl;
	gotoxy(40,4); cout << "Keesokan harinya..." << endl;
	cout << endl;
	//panggil Field.GrowAllPlant();
	//PEMANGGILAN KEJADIAN ACAK DILAKUKAN DI LUAR KELAS INI
}

//static void RandomizeEvent()
//	munculkan kejadian secara acak
//		jika hujan semua tanaman akan otomatis tersiram
//			(peluang hujan lebih besar di musim hujan dan lebih kecil di musim
//			 kemarau)
//			 saat musim hujan, peluang hujan 50:1:49 (1 untuk tornado,49 untuk tidak ada kejadian)
//			 saat musim kemarau, peluang hujan 4:6:50 (6 untuk tornado, 50 untuk tidak ada kejadian)
//		jika tornado semua tanaman akan mati
int Kalendar::RandomizeEvent()
{
	int random_int = (rand() % 100)+1;
	if(musim==1) {//jika musim hujan, peluang hujan bakal lebih besar
		if(random_int<=50) {//kejadian hujan
                    gotoxy(0,18); cout<< "\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
                    gotoxy(0,18); cout<< "Tadi pagi ada hujan melanda lahan..." << endl;
                    gotoxy(0,17); cout<< "\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; gotoxy(0,17); cout<< ">";
			return 1;
			//ubah status iswatered semua tanaman di lahan menjadi true
			//panggil Field.WaterAllPlant();	
		}else if(random_int<=51) {//kejadian tornado
                    gotoxy(0,18); cout<< "\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
                    gotoxy(0,18); cout << "Tadi malam ada tornado yang melanda lahan..." << endl;
                    gotoxy(0,17); cout<< "\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; gotoxy(0,17); cout<< ">";
			return 0;
			//ubah status umur semua tanaman menjadi 0(semua tanaman mati)
			//panggil Field.DieAllPlant();
		}
	}else if(musim==0) {
		if(random_int<=4) {//kejadian hujan
                    gotoxy(0,18); cout<< "\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
                    gotoxy(0,18); cout << "Tadi pagi hujan melanda lahan..." << endl;
                    gotoxy(0,17); cout<< "\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; gotoxy(0,17); cout<< ">";
			return 1;
			//ubah status iswatered semua tanaman di lahan menjadi true
			//panggil Field.WaterAllPlant();	
		}else if(random_int<=10) {//kejadian tornado
                    gotoxy(0,18); cout<< "\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
                    gotoxy(0,18); cout << "Tadi malam ada tornado yang melanda lahan..." << endl;
                    gotoxy(0,17); cout<< "\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; gotoxy(0,17); cout<< ">";
			return 0;
			//ubah status umur semua tanaman menjadi 0(semua tanaman mati)
			//panggil Field.DieAllPlant();
		}
	}
	return 2;//tidak ada kejadian khusus
}
